//
//  ViewController.m
//  02-hero展示a
//
//  Created by Song on 16/10/20.
//  Copyright © 2016年 song. All rights reserved.
//

#import "ViewController.h"
#import "SONGHero.h"

@interface ViewController () <UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate>
@property (nonatomic,strong) NSArray *heros; // 数组存放所有的英雄
@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 设置数据源：连线 / self.tableView.dataSource = self;
    
    // 设置tableview行高
    self.tableView.rowHeight = 60; // 每一行高度一致
}

#pragma mark - 字典转模型
- (NSArray *)heros {
    if (_heros == nil) {
        // 初始化
        
        // 获取plist全路径
        NSString *path = [[NSBundle mainBundle] pathForResource:@"heros.plist" ofType:nil];
        
        // 加载数组
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        
        // 将dictArray里面的所有字典转成模型，放入新数组
        NSMutableArray *tempArray = [NSMutableArray array]; // 临时数组
        for (NSDictionary *dict in dictArray) {
            // 创建模型对象
            SONGHero *hero = [SONGHero heroWithDict:dict];
            
            // 添加模型对象到数组中
            [tempArray addObject:hero];
        }
    
        // 赋值
        _heros = tempArray;
    }
    return _heros;
}

#pragma mark - 数据源方法
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.heros.count;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
//    NSLog(@"--------------%ld",indexPath.row);
    
    static NSString *ID = @"A"; // 1.用static修饰局部变量，只分配一次存储空间，只初始化一次
    UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:ID]; // 2.先从缓存池里取
    
    if (cell == nil) { // 3.如果缓存池为空，就创建
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
        
        NSLog(@"cell -- %ld",indexPath.row);
    }
    
    
    if (indexPath.row == 5) { // 特定的颜色
        cell.backgroundColor = [UIColor redColor];
    }else {
        cell.backgroundColor = [UIColor whiteColor];
    }

//    cell.tag = indexPath.row; // 利用tag 更改特定的颜色
//    if (cell.tag == 5) {
//        cell.backgroundColor = [UIColor redColor];
//    }else  {
//        cell.backgroundColor = [UIColor whiteColor];
//    }
    
    // 取出模型
    SONGHero *hero = self.heros[indexPath.row];
    
    cell.textLabel.text = hero.name;
    //    [cell.detailTextLabel setNumberOfLines:2];  // 两行detailTextLabel
    cell.detailTextLabel.text = hero.intro;
    cell.detailTextLabel.textColor = [UIColor grayColor];
    
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // cell后面加箭头
    
    
    
    NSLog(@"cell-----%@-----%ld",hero.name,indexPath.row);
    
    return cell;
}

#pragma mark - 代理方法(用来监听)
// 选中时调用
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // 取得被点击这行对应的模型
    SONGHero *hero = self.heros[indexPath.row];
    
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"数据展示" message:@"请更改数据" preferredStyle:UIAlertControllerStyleAlert];
    
//    __weak typeof(alert) wAlert = alert;
    
    // 点击确定按钮时：
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
        // 取得文本框最后的文字
        NSString *name = [alert.textFields.lastObject text];

//        // 修改模型数据
//        NSInteger row = alertView.tag;
//
//        SONGHero *hero = self.heros[row];
        hero.name = name;
//
//        // 告诉tableview重新加载数据
//        // 全部刷新
//        [self.tableView reloadData];
//
//        // 局部刷新
        NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row inSection:0];
        [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];

    }]];
    
    // 点击取消按钮：
    [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
    
    // 添加一个textfield
    [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.text = hero.name;
    }];
    
    [self presentViewController:alert animated:YES completion:nil];
    
//    UIAlertAction *btn = [UIAlertAction actionWithTitle:@"取消" style:UIPreviewActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
//    }];
    
    // 选中时弹出框框
//    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"数据展示" message:hero.name delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    
    // 设置对话框的类型
//    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
//    
//    // 取得唯一文本框，显示英雄名称
//    [alert textFieldAtIndex:0].text = hero.name;
//    
//    [alert show];
//    
//    // 绑定行号到alertview上
//    alert.tag = indexPath.row;
}

#pragma mark = alertView的代理方法
// 点击了alertview上面的按钮就会调用
// 按钮的索引，从0开始
//-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
//    
//    if (buttonIndex == 0) return;
//    
//    // 取得文本框最后的文字
//    NSString *name = [alertView textFieldAtIndex:0].text;
//    
//    // 修改模型数据
//    NSInteger row = alertView.tag;
//    
//    SONGHero *hero = self.heros[row];
//    hero.name = name;
//    
//    // 告诉tableview重新加载数据
//    // 全部刷新
////    [self.tableView reloadData];
//    
//    // 局部刷新
//    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
//    [self.tableView reloadSections:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//}

//// 取消选中时调用
//-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
//    
//}



@end


/*
 
 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
 
 // 取出模型
 SONGHero *hero = self.heros[indexPath.row];
 
 cell.textLabel.text = hero.name;
 //    [cell.detailTextLabel setNumberOfLines:2];  // 两行detailTextLabel
 cell.detailTextLabel.text = hero.intro;
 cell.detailTextLabel.textColor = [UIColor grayColor];
 
 cell.imageView.image = [UIImage imageNamed:hero.icon];
 
 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // cell后面加箭头
 
 NSLog(@"cell-----%@-----%ld",hero.name,indexPath.row);
 
 */









